#include "pfs.h"

void cargarBootSector();
void cargarFatTable();
void escribirFat(uint32_t nroCluster, uint32_t valorCluster, int iSocket);
uint32_t cantidadClustersLibres(uint32_t totalClusters);
void liberarListaEntries(ST_LISTA_FILE_ENTRY *listaFileEntry);
void liberarListaStrings(char ** lista);
int getFileEntry(const char *path, ST_FILE_ENTRY *file, int iSocket);
void getEntryName (ST_FILE_ENTRY * fileEntry, char * buff);
ST_LISTA_FILE_ENTRY * obtenerListaFileEntries(uint32_t nroCluster, int iSocket);
ST_LISTA_FILE_ENTRY * getRootDirectory(int iSocket);
ST_LISTA_FILE_ENTRY * obtenerListaDirectorio(ST_FILE_ENTRY * fileEntry, int iSocket);
uint32_t obtenerPrimerCluster(ST_DIRECTORY * dataEntry);
uint32_t obtenerUltimoCluster(ST_FILE_ENTRY * fileEntry);
char** strtok_modificada(char *str, char delimitor);
void dividirPath(const char * path,char * directory, char * file);
int generaNombreCorto(const char * nuevoNombre, ST_FILE_ENTRY * directorio, char * nombreCorto, int iSocket);
uint8_t checksum(const unsigned char *pFcbName);
int renombrarFile(const char * nuevoNombre, ST_FILE_ENTRY * destino, ST_FILE_ENTRY * fileEntry, int iSocket);
int crearDirectorio(const char * path, int iSocket);
int borrarDirectorio(const char * path, int iSocket);
int borrarArchivo(const char * path, int iSocket);
int truncarArchivo(const char * path, off_t tamanio, int iSocket);
int agregarCluster(ST_FILE_ENTRY * fileEntry, int iSocket);
int borrarUltimoCluster(ST_FILE_ENTRY * fileEntry, int iSocket);
int agregarClusterLibre(uint32_t ultimoCluster, int iSocket);
uint32_t obtenerClusterLibre();
int agregarEntrada(const char * directorio, ST_FILE_ENTRY fileEntry, int iSocket);
int actualizarEntrada(const char *path, ST_FILE_ENTRY * fileEntry, int iSocket);
uint32_t encontrarEntradasLibres(ST_CLUSTER * cluster, size_t numberOfEntries);
uint32_t cantidadDeClusters(ST_DIRECTORY * dataEntry);
uint32_t leerArchivo( size_t size, off_t offset, char * buf, const char * path, int iSocket );
uint32_t escribirArchivo( size_t size, off_t offset, char * buf, const char * path, int iSocket );
char* imprimirClusters(ST_FILE_ENTRY fileEntry);
